#!/bin/bash
#
# Copyright 2015-2017 Adrian DC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# === Make and upload ===
function mmmupl()
{
  # Usage
  if [ -z "${1}" ]; then
    echo '';
    echo ' Usage: mmmupl <package_or_path> [bool_partial_build] (Make zip and upload)';
    echo '';
    return;
  fi;

  # Build and package zip
  export MMMZIP_BUILD_PARTIAL=${2:-true};
  mmmzip "${1}";
  export MMMZIP_BUILD_PARTIAL=;

  # Upload to Private
  fastupl "${PACKAGE_RESULT}" 'zip';
}

# === Bootimage File Uploader ===
function devuplboot()
{
  # Usage
  if [ -z "${1}" ]; then
    echo '';
    echo ' Usage: devuplboot <device> (Upload ROM bootimage)';
    echo '';
    return;
  fi;

  # Variables
  local cwd;
  local device=${1};

  # Access repo root
  cwd=$(pwd);
  croot;

  # Rename and upload
  mv "./out/target/product/${device}/boot.img" "./out/target/product/${device}/boot-${device}.img";
  fileupl "./out/target/product/${device}/boot-${device}.img";

  # Restore path
  cd "${cwd}/";
}

# === ROM Device Upload ===
function devuplrom()
{
  # Usage
  if [ -z "${1}" ]; then
    echo '';
    echo ' Usage: devuplrom <device> [folder_path] (Upload ROM build)';
    echo '';
    return;
  fi;

  # Variables
  local device=${1};
  local upload=${2:-Development};
  local cwd;
  local target;
  local romfiles;
  local romfile;

  # Initialize variables
  cwd=$(pwd);
  target=$(codenametotarget "${device}");

  # ROM detection
  croot;
  romfiles=$(find "./out/target/product/${device}/"*"${device}"*".zip" \
                  "./out/target/product/${device}/"*"${target}"*".zip" \
                  -mtime -1 | sort);
  romfile=;
  for romfiletest in ${romfiles}; do
    if [ -f "${romfiletest}.md5sum" ]; then
      romfile=${romfiletest};
    fi;
  done;
  if [ -z "${romfile}" ]; then
    romfile=$(echo "${romfiles}" | head -n1 | awk '{ print $NF }');
  fi;

  # ROM upload
  if [ ! -z "${romfile}" ]; then
    if [ "${upload}" = 'private' ]; then
      fastupl "${romfile}";
    else
      fileupl "${romfile}" "${upload}";
    fi;
    export ANDROID_DEVELOPMENT_SHELL_TOOLS_UPLOADED_FILE=${romfile};
  else
    export ANDROID_DEVELOPMENT_SHELL_TOOLS_UPLOADED_FILE=;
  fi;

  # End of process
  cd "${cwd}";
}

# === Pushbullet ROM Status ===
function pushbrom()
{
  # Usage
  if [ -z "${1}" ]; then
    echo '';
    echo ' Usage: pushbrom <device_name> [rom_name] (Notify build success)';
    echo '';
    return;
  fi;

  # Variables
  local device=${1};
  local rom=${2:-ROM};
  local cwd;
  local host;

  # Access repo root
  cwd=$(pwd);
  croot;

  # ROM file
  romfile=$(find "./out/target/product/${device}/"*"${device}"*".zip" -mmin -30 | tail -n 1);
  host=$(hostname);
  if [ ! -z "${romfile}" ]; then
     pushb "${host}: ${rom} for ${device} ready";
  else
     pushb "${host}: ${rom} for ${device} failed";
  fi;

  # Restore ROM path
  cd "${cwd}";
}

# === Pushbullet Wrapped Makes ===
function makep()
{
  # Usage
  if [ -z "${1}" ]; then
    echo '';
    echo ' Usage: makep <parameters> (Use "makes" with Pushbullet notification)';
    echo '';
    return;
  fi;

  # Launch makes directly
  makes "${@}";

  # Notify the build through Pushbullet
  pushb "${BUILD_RESULT}\n\n$(date)" 2>/dev/null;
}
